<?php
namespace jy_weishoppension;
defined('BY_JYA') or exit('error');
/*
	养老金计算
	
*/
class commission extends \plugin{

	/*
		给指定养老金计算
	*/
	function create_commission($orderid){
			$order=pdo_get('jy_weishop_order',array('id'=>$orderid),array('id','price','mid'));
			$level_id=pdo_getcolumn('jy_weishoppension_member',array('mid'=>$order['mid']),'level_id');
			$goodsid=pdo_getall('jy_weishop_order_goods',array('id'=>$order['goodsid']),array('id','orderid','total','goodsid','fee_desc'));
			$total_costprice=0;
			$level_id=$level_id?:0;
			$money=0;
			$total_lastprice=$order['price'];
			$total_lastcostprice=0;
			$remark=array(
				'level_id'=>$level_id,
				'order_price'=>$order['price'],
			);
			foreach($goodsid as $item){
				if(!$item['fee_desc']){
					model('jy_weishop/order')->setfee_desc($item['orderid']);
				}
				$total_price=pdo_getcolumn('jy_weishop_order_goods',array('id'=>$item['id']),'total_price');
				$goods=pdo_get('jy_weishop_goods',array('id'=>$item['goodsid']),array('costprice'));
				$total_costprice=$item['total']*$goods['costprice'];
				//获取默认等级养老金比例
				$commissioninfo=$this->get('goods',array('goods_id'=>$item['goodsid'],'uniacid'=>$_SESSION['uniacid']));
				if($commissioninfo['commissiontype']){
						$commissioninfo['commissions']=json_decode($commissioninfo['commissions'],true);
						$commission_per=$commissioninfo['commissions']['commission'.$level_id];
						if($commissioninfo['commissiontype']==1){
							$commission_money =($total_price*$commission_per)/100;
							
						}else{
							$commission_money =(($total_price-$total_costprice)*$commission_per)/100;
						}
						$money +=$commission_money;
						$total_lastprice -=$total_price;
						$remark['goods_commission'][]=array('goods_id'=>$item['goodsid'],'total_price'=>$total_price,'total'=>$item['total'],'commission_per'=>$commission_per,'commission_money'=>$commission_money);
				}else{
					$total_lastcostprice +=$total_costprice;
				}
			}
			if($total_lastprice>0){
				$commission_per=$this->setting['commissions']['commission'.$level_id];
				if($this->setting['commissiontype']==1){
						$commission_money =($total_lastprice*$commission_per)/100;
				}else{					
						$commission_money =(($total_lastprice-$total_lastcostprice)*$commission_per)/100;
				}
				$money +=$commission_money;
				$remark['order_commission']=array('order_price'=>$total_lastprice,'commission_per'=>$commission_per,'commission_money'=>$commission_money);
			}
			$remark['commission_money']=$money;
			$new_commission=array(
				'uniacid'=>$_SESSION['uniacid'],
				'mid'=>$order['mid'],
				'level'=>$level_id,
				'orderid'=>$order['id'],
				'money'=>price($money),
				'remark'=>ijson_encode($remark),
				'type'=>$commissioninfo['commissiontype']?:$this->setting['commissiontype'],
				'createtime'=>TIMESTAMP,
				'status'=>0,
			);
			$this->insert('commission',$new_commission);
			$agent_update=array(
				'order_price +='=>$order['price'],
				'order_num +='=>1,
				'commission_money +='=>$money,
			);
			$this->update('member',$agent_update,array('mid'=>$order['mid']));
	}
	/*
		订单完成时，把养老金状态由初始的订单待完成升级为待结算
	*/
	public function order_complete($order=array()){
		if($order['id']){
			$this->update('commission',array('status'=>1,'complete_time'=>TIMESTAMP),array('orderid'=>$order['id']));
		}
	}
	/*
		创建结算单
	*/
	public function create_balance($mid){
		if(!$mid){
			exi('请先选择要结算的会员！','error');
		}
		//获取可结算养老金
		$params=array('uniacid'=>$_SESSION['uniacid'],'mid'=>$mid,'status'=>1);
		if($this->setting['balance_day']){
			//结算天数
			$time=TIMESTAMP-intval($this->setting['balance_day'])*86400;
			$params['complete_time <']=$time;
		}
		$commissions=$this->getall('commission',$params);
		if(!$commissions){
			exi('没有可结算的养老金！','error');
		}
		$commission_num=count($commissions);
		$money=0;
		foreach($commissions as $commission){
			$money+=$commission['money'];
		}
		//结算最低养老金检测
		if($money<$this->setting['balance_money']){
			exi('可结算养老金太少，无法结算！','error');
		}
		$new_balance=array(
			'uniacid'=>$_SESSION['uniacid'],
			'mid'=>$mid,
			'balancesn'=>get_ordersn($this->tablename('commission'),'balancesn','AC'),
			'commission_num'=>$commission_num,
			'money'=>$money,
			'createtime'=>TIMESTAMP,
			'status'=>0,
		);
		//结算手续费
		if($this->setting['balance_per']){
			$new_balance['balance_pay']=intval($new_balance['money']*$this->setting['balance_per'])/100;
		}else{
			$new_balance['balance_pay']=0;
		}
		$new_balance['final_money']=$new_balance['money']-$new_balance['balance_pay'];
		$this->insert('balance',$new_balance);
		$balance_id=pdo_insertid();
		foreach($commissions as $commission){
			$update=array(
				'status'=>2,
				'balancesn'=>$new_balance['balancesn'],
			);
			$this->update('commission',$update,array('id'=>$commission['id']));
		}
		return $balance_id;
	}
	/*
		审核结算单
	*/
	public function check_balance($balance_id,$status,$remark=''){
		$update=array(
			'status'=>$status,
			'check_time'=>TIMESTAMP,
			'remark'=>$remark,
		);
		$this->update('balance',$update,array('id'=>$balance_id));
	}
	/*
		打款结算单
	*/
	public function pay_balance($balance_id,$pay_type){
		$balance=$this->get('balance',array('id'=>$balance_id,'uniacid'=>$_SESSION['uniacid']));
		if(!$balance || $balance['status']!=1){
			exi('结算单不存在或者不符合打款条件，打款失败！','error');
		}
		$pay_types=array_keys($this->pay_types);
		if(!$pay_type || !in_array($pay_type,$pay_types)){
			exi('未设置打款方式或者打款方式不合法，打款失败！','error');
		}
		$func_name='pay_balance_by_'.$pay_type;
		$trade_no=$this->$func_name($balance['mid'],$balance['final_money'],$balance['balancesn']);
		$update=array(
			'status'=>3,
			'pay_type'=>$pay_type,
			'pay_trade_no'=>$trade_no,
			'pay_time'=>TIMESTAMP,
		);
		$this->update('balance',$update,array('id'=>$balance['id']));
		return true;
	}
	/*
		打款到余额
	*/
	protected function pay_balance_by_credit($mid,$money,$balancesn){
		return cfc('core')->member_credit($mid,'credit2',$money,true,$this->plugin_name,$remark='分销养老金打款');
	}
	/*
		打款到微信零钱
	*/
	protected function pay_balance_by_wechat($mid,$money,$balancesn){
		$params=array(
			'openid'=>$mid,
			'mch_billno'=>$balancesn,
			'money'=>$money,
			'remark'=>'代理商养老金发放',
		);
		$res=cfc('wechat_pay')->mch_pay($params);
		return $res['payment_no'];
	}
	/*
		打款到支付宝
	*/
	protected function pay_balance_by_alipay($mid,$money,$balancesn){
		exi('暂不支持打款到支付宝！','error');
	}
	/*
		打款到银行账户
	*/
	protected function pay_balance_by_union($mid,$money,$balancesn){
		exi('暂不支持打款到银行账户！','error');
	}

	public function commission_remark($remark){
		if(!$remark){
			return '';
		}
		$remark=json_decode($remark,true);
		$goods_str='';
		if($remark['goods_commission']){
			foreach($remark['goods_commission'] as $goods){
				$goods['title']=pdo_getcolumn('jy_weishop_goods',array('id'=>$goods['goods_id']),'title');
				$goods_str.="商品ID【{$goods['goods_id']}】，商品名称【{$goods['title']}】，商品数量【{$goods['total']}】，商品总价【{$goods['total_price']}】，养老金规则【{$goods['commission_per']}%】，分销养老金【{$goods['commission_money']}】\n";
			}
		}else{
			$goods_str='';
		}
		$remark['level_title']=pdo_getcolumn('jy_weishoppension_level',array('uniacid'=>$_SESSION['uniacid'],'level'=>$remark['level_id']),'title');
		$remark['level_title']=$remark['level_title']?:'默认等级';
		$remark_str=<<<TPL
会员等级ID【{$remark['level_id']}】，等级名称【{$remark['level_title']}】，订单总价【{$remark['order_price']}】
商品独立养老金：
{$goods_str}
订单养老金：
除去设置独立养老金的商品外订单金额【{$remark['order_commission']['order_price']}】，养老金规则【{$remark['order_commission']['commission_per']}%】，分销养老金【{$remark['order_commission']['commission_money']}】
养老金总计：【{$remark['commission_money']}】
TPL;
		return $remark_str;
	}
}